//
//  FourViewController.m
//  DemoTest
//
//  Created by DaShuEdu on 2017/4/25.
//  Copyright © 2017年 DaShuEdu. All rights reserved.
//

#import "FourViewController.h"
#import "FourViewModel.h"
#import "InfoCellModel.h"
#import "TBHeaderView.h"
#import <Masonry/Masonry.h>

@interface FourViewController ()

@property (nonatomic, strong) NSMutableArray *items;
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) FourViewModel *vm;
@property (nonatomic, strong) TBHeaderView *headView;

@end

@implementation FourViewController

- (void)viewDidLoad {
    [super viewDidLoad];
//    self.automaticallyAdjustsScrollViewInsets = NO;
    self.view.backgroundColor = [UIColor lightGrayColor];
    self.items = [NSMutableArray arrayWithCapacity:6];
    NSMutableArray *arr1 = [NSMutableArray arrayWithCapacity:3];
    NSMutableArray *arr2 = [NSMutableArray arrayWithCapacity:3];
    NSArray *imageArr = @[@"ju.jpg",@"android.png"];
    for (int i=0; i<3; i++) {
        InfoCellModel *model = [[InfoCellModel alloc] init];
        model.title = [self stringWithTitle:(i+1)];
        model.image = imageArr[i%2];
        if (i%2==0) {
            model.content = [self stringWithContent:i];
        }
        [arr1 addObject:model];
    }
    
    for (int i=3; i<7; i++) {
        InfoCellModel *model = [[InfoCellModel alloc] init];
        model.title = [self stringWithTitle:(i+1)];
        model.image = imageArr[i%2];
        if (i%2==0) {
            model.content = [self stringWithContent:i];
        }
        [arr2 addObject:model];
    }
    [_items addObject:arr1];
    [_items addObject:arr2];
    
    __weak typeof(self) weakSelf = self;
    UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithTitle:@"点我" style:UIBarButtonItemStylePlain target:self action:@selector(rightBarAction:)];
    self.navigationItem.rightBarButtonItem = rightItem;
    
    self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
    self.tableView.backgroundColor = [UIColor greenColor];
    self.headView = [[TBHeaderView alloc] init]; //Frame:CGRectMake(0, 0, 320, 20)

    self.tableView.tableHeaderView = self.headView;
    [self.view addSubview:self.tableView];
    
    [_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.right.top.bottom.mas_equalTo(weakSelf.view);
    }];
    
    [_headView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(weakSelf.tableView.mas_left);
        make.top.mas_equalTo(weakSelf.tableView.mas_top);
        make.right.mas_equalTo(weakSelf.tableView.mas_right);
        make.width.mas_equalTo(weakSelf.tableView.mas_width);
        make.height.mas_equalTo(20);
    }];
    
    DidSelectCellBlock didSelectCellBlock = ^(NSIndexPath *indexPath, id item) {
        NSLog(@"indexPath.row:%li, indexPath.section:%li",(long)indexPath.row, (long)indexPath.section);
    };
    
    self.vm = [[FourViewModel alloc] initWithItems:_items didSelectBlock:didSelectCellBlock];
    [self.vm handleTableViewDataSourceAndDelegate:self.tableView];
}

- (void)rightBarAction:(UIBarButtonItem *)rightBar
{
    UIImageView *showImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"android"]];
    showImage.frame = CGRectMake(100, 10, 70, 70);
    for (UIView *view in self.headView.subviews) {
        [view removeFromSuperview];
    }
    [self.headView addSubview:showImage];
    self.headView.frame = CGRectMake(0, 0, 320, 90);
    [self.tableView reloadData];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSString *)stringWithTitle:(int)num
{
    NSString *title = @"写作原因：因为第一份工作有幸和5年iOS经验上司一起从头开始写项目，所以对于项目架构有点感悟，在这里献给大家（是自己写的项目，但是90%还原上司项目基础架构，数据库从换成了，不过写法和功能甚至都一样），先给一个码云地址你们下载下载后可以直接以此开始写你们的项目，所以肯定是没问题的，常用的第三方、分类、工具、网络封装(基于AFN)和本地缓存等常用的都已经做好了；并且我已经把业务的前两层做好了（就是登陆、欢迎界面、首页转换逻辑，只供参考你们可以修改为你们的，第三步的需要自己跟着写下代码），你们可以按照这个思路来搭建页面和业务；这个系列总体分为两部分：介绍和使用";
    NSUInteger len = title.length / num;
    return [title substringToIndex:len];
}

- (NSString *)stringWithContent:(int)num
{
    NSString *content = @" 1：本地数据库采用你可能会问了，现在很多数据库啊，为啥这都要说，我们知道的强大是因为它有个和能直接存入对象，存/取对象目前来说是基本要求了，那么你知道吗，然后我找了一下除了之外还有和有类似的库支持，但是直接存取对象我直接抛弃了，然后我找到了，它有一个专有库来实现 的效果，这个非常有用，让我们可以轻松的做到界面实时显示最新数据；2：本地数据存取每个用户是一个单独的文件夹，比如用户为1的有一个名为1文件夹，为2的有一个名为2的文件夹，然后公共的数据可以放到名为0的文件夹然后单独一个管理；有的软件有游客身份，其实就是读取的默认文件夹0的数据，读取的时候可以看到中：函数就可以读取到对应用户数据了，而且这样做可以很容易迁移数据（3：网络请求返回的数据和界面显示需要的数据不直接关联，他们和本地数据库直接关联，这是非常重要的一个思想，我们最开始的时候请求回调中直接把数据赋值给的，然后还记得吗？这很容易造成显示错误，最明显的就是几个页面都对同一个对象数组进行操作会很难把控，所以我们正确的思路应该是：数据请求得到的数据我们直接存入数据库然后就可以结束了，数据库得到数据后发送一个回调，然后所有监听的页面重新从本地获取最新数据再赋值给的后，这样的话请求就是请求没有其他的操作，数据变化监听由数据库特性发出；";
    NSUInteger len = content.length - num * 5;
    return [content substringToIndex:len];
}

- (void)dealloc {
    NSLog(@"%s",__func__);
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
